home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
hity wydania
/
Ubuntu 9.10 PL
/
karmelkowy-koliberek-desktop-9.10-i386-PL.iso
/
casper
/
filesystem.squashfs
/
usr
/
sbin
/
hplj1000
< prev
next >
Wrap
Text File
|
2009-10-19
|
5KB
|
223 lines
#!/bin/sh
# hplj1000:
# hplj1005:
# hplj1020:
#
# Hotplug script for HP1000/1005 USB laser printers. The model number
# that this script deals with is determined from the script name.
#
# Used to download firmware automatically into the printer when it
# is powered up or plugged into the USB port.
#
# Also, run this script once with the magic argument "install-usermap"
# to create the proper entry in the /etc/hotplug/usb.usermap file.
#
# The inspiration fo this script is from:
# Oscar Santacreu. Alicante-Spain (2002)
# Mike Morgan (2004)
#
# udev calls us twice on FC4! Just want /dev/usb/lp<N>
case "$DEVNAME" in
/dev/usb/usb*) exit;;
esac
PROGNAME="$0"
#
# Set $DEV to, e.g. /dev/usb/lp0, to force the device you want
# Else, leave it null to automatically detect the device
#
DEV=/dev/usb/lp0
DEV=""
#
# Directory to find downloadable HP firmware files sihpMMMM.dl
#
FWDIR=/usr/share/foo2zjs/firmware
#
# Program used to determine USB printer id information
#
# NOTE: /usr/bin is NOT mounted at this point
#
# e.g. /etc/rc.sysinit:
# /sbin/start_udev
# [snip]
# # Mount all other filesystems (except for NFS and /proc, which is already
#
PRINTERID=`which usb_printerid`
#
# Figure out how to log our messages
#
if [ -t 1 ]; then
# Running from a tty...
log() {
echo "$PROGNAME: foo2zjs: $@"
}
elif [ -x /usr/bin/logger ]; then
# Have logger...
log() {
logger -t "$PROGNAME" -- "foo2zjs: $@"
}
else
# No logger...
log() {
echo "$PROGNAME: foo2zjs: $@" >> /var/log/messages
}
fi
#
# Figure out the model number from the name of this script
#
case "$0" in
*P1005)
MODEL=P1005; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x3d17 #Model
;;
*P1006)
MODEL=P1006; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x3e17 #Model
;;
*P1007)
MODEL=P1007; FWMODEL=P1005 # Alias
USB1=0x03f0 #Vendor
USB2=0x4817 #Model
;;
*P1008)
MODEL=P1008; FWMODEL=P1006 # Alias
USB1=0x03f0 #Vendor
USB2=0x4917 #Model
;;
*P1505)
MODEL=P1505; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x3f17 #Model
;;
*P1505n)
MODEL=P1505n; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x4017 #Model
;;
*1000)
MODEL=1000; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x0517 #Model
;;
*1005)
MODEL=1005; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x1317 #Model
;;
*1018)
MODEL=1018; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x4117 #Model
;;
*1020)
MODEL=1020; FWMODEL=$MODEL
USB1=0x03f0 #Vendor
USB2=0x2b17 #Model
;;
*)
log "Only HP LaserJet 100[05],1018,1020,P100[5678],P1505 are supported"
exit
;;
esac
#
# The special command line argument "install-usermap" will install
# the proper entry into the /etc/hotplug/usb.usermap file
#
case "$1" in
install-usermap)
if [ "$USB2" != "" ]; then
if [ -w /etc/hotplug/usb.usermap ]; then
USERMAP=/etc/hotplug/usb.usermap
elif [ -d /etc/hotplug/usb/ ]; then
USERMAP=/etc/hotplug/usb/foo2zjs.usermap
if [ ! -s $USERMAP ]; then
echo > $USERMAP
fi
else
log "No /etc/hotplug usermap!"
exit
fi
chmod 664 $USERMAP
ex - $USERMAP <<-EOF
g/^hplj$MODEL/d
\$a
hplj$MODEL 0x0003 $USB1 $USB2 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
.
w
q
EOF
else
log "I don't know the USB info for this model yet. Please run"
log "usb_printerid on the usb device and send the output to:"
log "rick.richardson@comcast.net"
fi
exit 0
;;
esac
#
# Procedure to load a single device with firmware
#
load1() {
_dev="$1"
fw="$FWDIR/sihp$FWMODEL.dl"
if [ ! -f "$fw" ]; then
log "Missing HP LaserJet $MODEL firmware file $fw"
log "...read foo2zjs installation instructions and run ./getweb $MODEL"
return 1
fi
log "loading HP LaserJet $MODEL firmware $fw to $_dev ..."
# There is a timeout problem with udev and FC4, so spin it off.
(
if cat $fw > $_dev; then
log "... download successful."
else
log "... download failed."
fi
) &
return 0
}
#
# OK, now download firmware to any printers that need it
#
if [ "$DEV" != "" ]; then
#
# force downloading to a specific device
#
load1 "$DEV"
elif [ -x $PRINTERID ]; then
#
# Sniff around for printers that need a firmware download
#
usblps=`find /dev/usb -name 'lp*'`" "`find /dev -name 'usblp*'`
for dev in $usblps; do
status=`$PRINTERID $dev 2>/dev/null | grep -y "hp LaserJet $MODEL"`
if [ "$status" != "" ]; then
# This is a LaserJet 100x
chmod 0666 $dev
status=`$PRINTERID $dev | grep 'FWVER'`
if [ "$status" = "" ]; then
# Firmware is not yet loaded
load1 "$dev"
else
log "HP LaserJet $MODEL firmware already loaded into $dev"
fi
fi
done
else
log "HP LaserJet $MODEL firmware was not downloaded..."
log "...couldn't find $PRINTERID and DEV is not set"
fi